为什么需要 Kubernetes
容器化技术(Docker)解决了单机环境的问题:快速启动数据库、缓存等本地环境,将应用打包为镜像并推送至仓库。但随着容器数量增长和应用架构复杂化,单纯使用 Docker 脚本或 Docker Compose 已经力不从心。
单机容器管理的局限
考虑一个实际场景:应用启动依赖数据库,数据库必须先于应用启动。当容器数量扩展到成百上千个时,需要管理的维度急剧增加:
| 管理需求 | Docker/Docker Compose | Kubernetes |
|---|---|---|
| 版本控制 | 手动脚本 | 声明式配置(Deployment) |
| 扩缩容 | 手动操作 | 自动水平扩缩(HPA) |
| 负载均衡 | 手动配置 Nginx | 内置 Service + Ingress |
| 服务发现 | 手动管理 | 内置 DNS + Service |
| 自愈能力 | 无 | 自动重启、替换 Pod |
| 滚动更新 | 手动操作 | 声明式滚动更新策略 |
| 配置管理 | 环境变量/配置文件 | ConfigMap + Secret |
Kubernetes 是什么
Kubernetes(简称 K8s)是一个开源的容器编排平台,核心能力包括:
- 容器编排:自动化部署、扩展和管理容器化应用
- 声明式配置:通过 YAML 文件描述期望状态,K8s 自动实现
- 自愈能力:自动检测和替换故障容器
- 服务发现与负载均衡:内置 DNS 和网络代理
- 丰富的 API 接口和 CLI 工具:kubectl 命令行和 REST API
核心架构
K8s 采用典型的主从(Master-Worker)架构:
┌─────────────────── Master Node ───────────────────┐
│ │
│ ┌──────────┐ ┌──────────────────┐ ┌───────────┐ │
│ │ API │ │ Controller │ │ Scheduler │ │
│ │ Server │ │ Manager │ │ │ │
│ └──────────┘ └──────────────────┘ └───────────┘ │
│ │
│ ┌──────────┐ │
│ │ etcd │ (分布式键值存储) │
│ └──────────┘ │
└────────────────────────────────────────────────────┘
│
▼
┌─────────────────── Worker Node ───────────────────┐
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ kubelet │ │ kube- │ │ Container │ │
│ │ │ │ proxy │ │ Runtime │ │
│ └──────────┘ └──────────┘ └──────────────────┘ │
└────────────────────────────────────────────────────┘
text
- API Server:集群的统一网关,所有组件通过它与 etcd 通信
- Controller Manager:管理各种控制器(Deployment、ReplicaSet 等)
- Scheduler:将 Pod 调度到合适的 Worker 节点
- etcd:存储集群的所有状态数据
- kubelet:每个 Worker 节点上的代理,管理 Pod 生命周期
- kube-proxy:管理网络规则和负载均衡
CNCF 与云原生生态
Kubernetes 由 CNCF(Cloud Native Computing Foundation,云原生计算基金会)维护。CNCF 生态分为三个层级:
Graduated Projects(已毕业项目)
生产可用,社区成熟,API 稳定:
| 项目 | 类别 | 说明 |
|---|---|---|
| Kubernetes | 容器编排 | 核心项目 |
| Prometheus | 监控 | 指标采集和告警 |
| containerd | 容器运行时 | 高性能容器运行时 |
| CoreDNS | 服务发现 | 集群内 DNS 解析 |
| Envoy | 网络代理 | 服务网格数据面 |
| Helm | 包管理 | K8s 应用的包管理器 |
Incubating Projects(孵化中项目)
发展中的项目,可能存在较大的 API 变更。
Sandbox Projects(沙箱项目)
早期项目,如 K3s(轻量级 K8s 发行版,适用于 IoT 和边缘计算)。
容器编排方案对比
| 方案 | 维护方 | 社区活跃度 | 特点 |
|---|---|---|---|
| Kubernetes | CNCF | 最高 | 功能最全,生态最丰富 |
| Docker Swarm | Docker | 低 | 简单易用,但功能有限 |
| Apache Mesos | Apache | 中 | 适合大规模集群 |
| AWS ECS/EKS | Amazon | 高 | 云托管方案 |
| GKE | 高 | 云托管方案 |
相关资源
↑